package com.yulongtian.oneProblemEveryDay.month202211.day20221104;

/**
 * https://leetcode.cn/problems/reach-a-number/
 * 可
 *
 * @author yulongTian
 * @create 2022-11-04 10:33
 */
public class Test01 {
    public static void main(String[] args) {
        System.out.println(reachNumber(1000000000));
    }

//    public static int reachNumber(int target) {
//        //记录步数，即最终的结果
//        int res = 2;
//        //全都转换为正数
//        if (target < 0) {
//            target *= -1;
//        }
//
//        //记录过程中的坐标
//        int point = 1;
//        while (true) {
//            //走到终点
//            if (point == target) {
//                break;
//            }
//
//            //可以向右
//            if (point + res <= target) {
//                if(point+res==target){
//                    break;
//                }
//                point += res;
//                res++;
//                continue;
//            }
//
//            //向左
//            if (point + res > target) {
//                point -= res;
//                res++;
//                continue;
//            }
//
//
//        }
//
//        return res;
//    }

    public static int reachNumber(int target) {
        //全都转换为正数
        if (target < 0) {
            target *= -1;
        }
        int res = 0;

        for (int x = 0; ; x++) {
            double n = getN(x, target);
            if (isInt(n)) {
                res = (int) n;
                break;
            }
        }
        return res;

    }

    public static double getN(int x, int target) {
        return Math.pow(4 * x + 2 * target + 0.25, 0.5) - 0.5;
    }

    public static boolean isInt(double num) {
        return Math.abs(num - Math.round(num)) < Double.MIN_VALUE;
    }


}
